﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using RegExStudio.RegExStudioEventArgs;

namespace RegExStudio.UserControls
{
    public partial class CtrlHeader : CtrlBase
    {
        /// <summary>
        /// Wenn es den gewählten Match nicht gibt
        /// Wenn true, wird das Control mit der Warnungfarbe eingefärbt
        /// </summary>
        public bool MatchWarningVisible
        {
            get { return ctrlMatch.WarningVisible; }
            set
            {
                ctrlMatch.WarningVisible = value;
            }
        }

        /// <summary>
        /// Setzt/Liest den Namen der RegEx aus
        /// </summary>
        public string RegExName
        {
            get { return ctrlName.RegExName; }
            set { ctrlName.RegExName = value; }
        }

        public CtrlHeader()
        {
            InitializeComponent();
        }

        public int Match
        {
            get { return ctrlMatch.Match; }
            set { ctrlMatch.Match = value; }
        }

        /// <summary>
        /// Der Name wurde geändert
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ctrlName_NameChanged(object sender, NameChangedEventArgs e)
        {
            OnNameChanged(e.Name);
        }

        /// <summary>
        /// EventHandler für Änderung des Namens
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void NameChangedEventHandler(object sender, NameChangedEventArgs e);

        /// <summary>
        /// Event das ausgelöst wird, wenn der Name der RegEx geändert wurde
        /// </summary>
        public event NameChangedEventHandler NameChanged;

        /// <summary>
        /// Feuert das Event, wenn der Name geändert wurde
        /// </summary>
        /// <param name="name"></param>
        protected virtual void OnNameChanged(string name)
        {
            if (NameChanged != null)
            {
                NameChanged(this, new NameChangedEventArgs(name));
            }
        }

        /// <summary>
        /// Das gewünschte Match hat sich geändert
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ctrlMatch_MatchChanged(object sender, MatchChangedEventArgs e)
        {
            OnMatchChanged(e.Match);
        }

        /// <summary>
        /// EventHandler für Änderung des Matches
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void MatchChangedEventHandler(object sender, MatchChangedEventArgs e);

        /// <summary>
        /// Event das ausgelöst wird, wenn gewählte Match geändert wurde
        /// </summary>
        public event MatchChangedEventHandler MatchChanged;

        /// <summary>
        /// Feuert das Event, wenn gewählte Match geändert wurde
        /// </summary>
        /// <param name="match"></param>
        protected virtual void OnMatchChanged(int match)
        {
            if (MatchChanged != null)
            {
                MatchChanged(this, new MatchChangedEventArgs(match));
            }
        }

    }
}